package com.eascs.admin.dataType.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.eascs.admin.dataType.dao.O2ODataTypeDao;
import com.eascs.admin.dataType.entity.O2ODataTypeChildEntity;
import com.eascs.admin.dataType.entity.O2ODataTypeEntity;
import com.eascs.admin.dataType.vo.O2ODataTypeEntityVo;
import com.eascs.admin.item.entity.O2oPubDatadictionaryEntity;
import com.eascs.admin.item.entity.O2oPubDditemEntity;
import com.eascs.app.dao.PageResult;
import com.eascs.app.dao.SqlPageQuery;
import com.eascs.common.util.StringUtil;

/**
 * @ClassName: O2ODataTypeService.java
 * @Description: <p> 资料类型Service </p>
 * @author yy
 * @date 2017年8月29日 上午11:00:32
 * @version V1.0
 */
@Service
public class O2ODataTypeService {

	@Autowired
	O2ODataTypeDao o2ODataTypeDao;
	
	/**
	 * @Description: <p> 分页查询资料类型主表数据 </p>
	 * @author CXW
	 * @date 2017年8月29日 下午1:38:08
	 * @version V1.0
	 * @param 
	 * @return PageResult<Object[]>
	 */
	public PageResult<Object[]> findO2ODateTypeByPage(O2ODataTypeEntityVo vo) {
		SqlPageQuery<Object[]> sqlPageQuery = new SqlPageQuery<>(Object[].class, vo.getPageSize(), vo.getPageIndex());
		StringBuffer querySql = new StringBuffer();
		querySql.append(" select dt_id,dt_code,dt_name,dt_order, ");
		querySql.append(" (select count(*) from   o2o_data_type_child as dtc where dtc.dt_id = t.dt_id 	and t.is_lock ='N' and dtc.is_lock='N' ) as num ");
		querySql.append(" from o2o_data_type t where is_lock ='N' ");
		if (!StringUtil.isEmpty(vo.getDtCode())) {
			querySql.append(" and dt_code like ? ");
			sqlPageQuery.addLikeParam(vo.getDtCode());
		}
		if (!StringUtil.isEmpty(vo.getDtName())) {
			querySql.append(" and dt_name like ? ");
			sqlPageQuery.addLikeParam(vo.getDtName());
		}
		querySql.append(" order by dt_order asc ");
		sqlPageQuery.setQuerySql(querySql.toString());
		return o2ODataTypeDao.findDataWithPage(sqlPageQuery);
	}
	
	/**
	 * @Description: <p> 分页查询资料类型子表数据 </p>
	 * @author yy
	 * @date 2017年8月29日 下午1:38:40
	 * @version V1.0
	 * @param 
	 * @return PageResult<Object[]>
	 */
	public PageResult<Object[]> findO2ODateTypeChildByPage(O2ODataTypeEntityVo vo){
		SqlPageQuery<Object[]> sqlPageQuery = new SqlPageQuery<>(Object[].class, vo.getPageSize(), vo.getPageIndex());
		StringBuffer querySql = new StringBuffer();
		querySql.append(" select dtc.dt_child_id,dtc.dt_child_code,dtc.dt_child_name,dtc.dt_child_order,dtc.dt_child_desc,dtc.dt_child_format ");
		querySql.append(" from o2o_data_type_child dtc  where is_lock ='N' ");
		if (!StringUtil.isEmpty(vo.getDtId())) {
			querySql.append(" and dtc.dt_id = ? ");
			sqlPageQuery.addParam(vo.getDtId());
		}
		querySql.append(" order by dtc.dt_child_order asc");
		sqlPageQuery.setQuerySql(querySql.toString());
		return o2ODataTypeDao.findDataWithPage(sqlPageQuery);
	}
	
	/**
	 * @Description: <p> 向表 o2o_data_type 中插入资料类型数据</p>
	 * @author yy
	 * @date 2017年8月29日 下午1:30:46
	 * @version V1.0
	 * @param o2ODateTypeEntity
	 * @return int
	 */
	@Transactional(transactionManager = "o2oTransactionManager")
	public int saveO2ODataType(O2ODataTypeEntity o2ODataTypeEntity){
		return o2ODataTypeDao.insert(o2ODataTypeEntity);
	}
	
	/**
	 * @Description: <p> 向表 o2o_data_type_child 中插入资料类型子类型数据</p>
	 * @author yy
	 * @date 2017年8月29日 下午2:30:46
	 * @version V1.0
	 * @param o2ODateTypeChildEntity
	 * @return int
	 */
	@Transactional(transactionManager = "o2oTransactionManager")
	public int saveO2ODataTypeChild(O2ODataTypeChildEntity o2ODataTypeChildEntity){
		return o2ODataTypeDao.insert(o2ODataTypeChildEntity);
	}
	
	/**
	 * @Description: <p> 更新表 o2o_data_type 中的资料类型数据 </p>
	 * @author yy
	 * @date 2017年8月29日 下午1:33:04
	 * @version V1.0
	 * @param o2ODateTypeEntity
	 * @return int
	 */
	@Transactional(transactionManager = "o2oTransactionManager")
	public int updateO2ODataTypeById(O2ODataTypeEntity o2ODataTypeEntity){
		return o2ODataTypeDao.updateById(o2ODataTypeEntity);
	}
	
	/**
	 * @Description: <p> 更新表 o2o_data_type_child 中的资料类型子类型数据 </p>
	 * @author yy
	 * @date 2016年9月23日 下午1:33:04
	 * @version V1.0
	 * @param datadictionaryEntity
	 * @return int
	 */
	@Transactional(transactionManager = "o2oTransactionManager")
	public int updateO2ODataTypeChildById(O2ODataTypeChildEntity o2ODataTypeChildEntity){
		return o2ODataTypeDao.updateById(o2ODataTypeChildEntity);
	}
	
	/**
	 * @Description: <p> 根据dtid查询资料类型 </p>
	 * @author yy
	 * @date 2017年8月29日 下午2:36:26
	 * @version V1.0
	 * @param dtId
	 * @return O2ODateTypeEntity
	 */
	public O2ODataTypeEntity findO2ODataTypeById(String dtId){
		return o2ODataTypeDao.getById(O2ODataTypeEntity.class, dtId);
	}
	
	/**
	 * @Description: <p> 根据code查询资料类型</p>
	 * @author yy
	 * @date 2017年8月29日 下午2:36:26
	 * @version V1.0
	 * @param code
	 * @return O2ODateTypeEntity
	 */
	public O2ODataTypeEntity findO2ODataTypeByCode(String dtCode){
		String sql = "select * from o2o_data_type where dt_code = ? and is_lock='N' ";
		return o2ODataTypeDao.findEntity(sql, O2ODataTypeEntity.class, dtCode);
	}
	
	/**
	 * @Description: <p> 根据dt_child_id查询资料类型子类型 </p>
	 * @author yy
	 * @date 2017年8月29日 下午8:36:26
	 * @version V1.0
	 * @param itemNo
	 * @return O2oPubDditemEntity
	 */
	public O2ODataTypeChildEntity findO2ODataTypeChildById(String dtChildId){
		return o2ODataTypeDao.getById(O2ODataTypeChildEntity.class, dtChildId);
	}
	
	/**
	 * @Description: <p> 根据code查询资料类型子类型 </p>
	 * @author yy
	 * @date 2017年8月29日 下午8:36:26
	 * @version V1.0
	 * @param code
	 * @return O2oPubDditemEntity
	 */
	public O2ODataTypeChildEntity findO2ODataTypeChildByCode(String code, String dtId){
		String sql = "select * from o2o_data_type_child where dt_child_code = ? and dt_id = ? and is_lock='N' ";
		return o2ODataTypeDao.findEntity(sql, O2ODataTypeChildEntity.class, code, dtId);
	}
	

	
}
